版本库中的文件
code
图片
视频
word
so on
git
能检测代码的差异性,但是对于图片,视频和word这些二进制的文件,git
只能跟踪其大小变化.所以对于文字版本的控制,最好使用markdown以文本的形式
进行存储.
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
添加
Unix的哲学是“没有消息就是好消息”
git commit -m 'blabla'
git commit -am 'blabla'
这两者浅显的区别是:-am
表示没有新增加文件,只是对原来的文件做了修改,所以执行此命令没问题.
如果新建了文件,就按正常步骤:
$ git add .
$ git commit -m 'blabla'
查看历史提交记录
git log
git log --pretty=oneline
回退版本
$ git reset --hard HEAD
有时,我们会有把当前版本在本地弄乱的情况,执行上面命令即可回到最后一次提交的版本上去.
那么上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
回到未来
$ git reflog
$ git co d62cd5c
➜ gittest git:(d62cd5c) git br
* (detached from d62cd5c)
master
➜ gittest git:(d62cd5c) git co master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
d62cd5c update
If you want to keep them by creating a new branch, this may be a good time
to do so with:
git branch new_branch_name d62cd5c
Switched to branch 'master'
➜ gittest git:(master) git br testbr d62cd5c
➜ gittest git:(master) git br
* master
testbr
➜ gittest git:(master) git merge testbr
Updating d28643d..d62cd5c
Fast-forward
readme.md | 2 ++
1 file changed, 2 insertions(+)
查看区别
用git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别
撤销修改
git checkout -- file
可以丢弃工作区的修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令.
删除文件
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
1 .使用rm
直接删除,然后恢复
➜ gittest git:(master) ls
new.md readme.md
➜ gittest git:(master) rm new.md
➜ gittest git:(master) ✗ ls
readme.md
➜ gittest git:(master) ✗ git co -- new.md
➜ gittest git:(master) ls
new.md readme.md
2 .使用git rm
,工作区被删除的文件也会消失
➜ gittest git:(master) ls
new.md readme.md
➜ gittest git:(master) git rm new.md
rm 'new.md'
➜ gittest git:(master) ✗ ls
readme.md
➜ gittest git:(master) ✗ git st
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: new.md
但git
会保存一个版本记录,只要是commit
过的,都可以放心删除
,删除后做个提交记录就好.
分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
,强制删除git branch -D <name>
删除远程分支:
As of Git v1.7.0, you can delete a remote branch using
git push origin --delete <branchName>
which is easier to remember than
git push origin :<branchName>
多人协作
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。
现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
先用git pull
把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream branch-name origin/branch-name
。
创建标签
切换到master,执行
$ git tag v1.0
可以用命令git tag
查看所有标签:
➜ gittest git:(master) ✗ git tag
v0.9
v1.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,
方法是找到历史提交的commit id,然后打上就可以了:
$ git log --pretty=oneline --abbrev-commit
0f14186 add new.md
d62cd5c update
d28643d first
(END)
$ git tag v0.9 0f14186
--abbrev-commit
这个参数代表: "show only partial prefixes of commit object names"
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
小结
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
修改未push得"-m"(message)信息。
git commit --amend
管理未被gitignore的文件
git commit --cached _yourfile_
如何贡献
Fork it
Clone it
Create your feature branch (git checkout -b my-new-feature)
Commit your changes (git commit -am 'Add some feature')
Push to the branch (git push origin my-new-feature)
Create new Pull Request
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。